package com.visizen.wisdomclass.server.client;

import com.visizen.wisdomclass.server.model.WcLocationPathRule;
import com.visizen.wisdomclass.server.model.WcLocationPathRuleExample;
import com.visizen.wisdomclass.server.model.WcLocationPathRuleExample.Criteria;
import com.visizen.wisdomclass.server.model.WcLocationPathRuleExample.Criterion;

import java.util.List;
import java.util.Map;

import static org.apache.ibatis.jdbc.SqlBuilder.*;

public class WcLocationPathRuleSqlProvider {

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	public String countByExample(WcLocationPathRuleExample example) {
		BEGIN();
		SELECT("count(*)");
		FROM("wc_location_path_rule");
		applyWhere(example, false);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	public String deleteByExample(WcLocationPathRuleExample example) {
		BEGIN();
		DELETE_FROM("wc_location_path_rule");
		applyWhere(example, false);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	public String insertSelective(WcLocationPathRule record) {
		BEGIN();
		INSERT_INTO("wc_location_path_rule");
		if (record.getRule_id() != null) {
			VALUES("rule_id", "#{rule_id,jdbcType=BIGINT}");
		}
		if (record.getUser_id() != null) {
			VALUES("user_id", "#{user_id,jdbcType=BIGINT}");
		}
		if (record.getRule_name() != null) {
			VALUES("rule_name", "#{rule_name,jdbcType=VARCHAR}");
		}
		if (record.getRule_start_hour() != null) {
			VALUES("rule_start_hour", "#{rule_start_hour,jdbcType=INTEGER}");
		}
		if (record.getRule_end_hour() != null) {
			VALUES("rule_end_hour", "#{rule_end_hour,jdbcType=INTEGER}");
		}
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	public String selectByExample(WcLocationPathRuleExample example) {
		BEGIN();
		if (example != null && example.isDistinct()) {
			SELECT_DISTINCT("rule_id");
		} else {
			SELECT("rule_id");
		}
		SELECT("user_id");
		SELECT("rule_name");
		SELECT("rule_start_hour");
		SELECT("rule_end_hour");
		FROM("wc_location_path_rule");
		applyWhere(example, false);
		if (example != null && example.getOrderByClause() != null) {
			ORDER_BY(example.getOrderByClause());
		}
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	public String updateByExampleSelective(Map<String, Object> parameter) {
		WcLocationPathRule record = (WcLocationPathRule) parameter
				.get("record");
		WcLocationPathRuleExample example = (WcLocationPathRuleExample) parameter
				.get("example");
		BEGIN();
		UPDATE("wc_location_path_rule");
		if (record.getRule_id() != null) {
			SET("rule_id = #{record.rule_id,jdbcType=BIGINT}");
		}
		if (record.getUser_id() != null) {
			SET("user_id = #{record.user_id,jdbcType=BIGINT}");
		}
		if (record.getRule_name() != null) {
			SET("rule_name = #{record.rule_name,jdbcType=VARCHAR}");
		}
		if (record.getRule_start_hour() != null) {
			SET("rule_start_hour = #{record.rule_start_hour,jdbcType=INTEGER}");
		}
		if (record.getRule_end_hour() != null) {
			SET("rule_end_hour = #{record.rule_end_hour,jdbcType=INTEGER}");
		}
		applyWhere(example, true);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	public String updateByExample(Map<String, Object> parameter) {
		BEGIN();
		UPDATE("wc_location_path_rule");
		SET("rule_id = #{record.rule_id,jdbcType=BIGINT}");
		SET("user_id = #{record.user_id,jdbcType=BIGINT}");
		SET("rule_name = #{record.rule_name,jdbcType=VARCHAR}");
		SET("rule_start_hour = #{record.rule_start_hour,jdbcType=INTEGER}");
		SET("rule_end_hour = #{record.rule_end_hour,jdbcType=INTEGER}");
		WcLocationPathRuleExample example = (WcLocationPathRuleExample) parameter
				.get("example");
		applyWhere(example, true);
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	public String updateByPrimaryKeySelective(WcLocationPathRule record) {
		BEGIN();
		UPDATE("wc_location_path_rule");
		if (record.getUser_id() != null) {
			SET("user_id = #{user_id,jdbcType=BIGINT}");
		}
		if (record.getRule_name() != null) {
			SET("rule_name = #{rule_name,jdbcType=VARCHAR}");
		}
		if (record.getRule_start_hour() != null) {
			SET("rule_start_hour = #{rule_start_hour,jdbcType=INTEGER}");
		}
		if (record.getRule_end_hour() != null) {
			SET("rule_end_hour = #{rule_end_hour,jdbcType=INTEGER}");
		}
		WHERE("rule_id = #{rule_id,jdbcType=BIGINT}");
		return SQL();
	}

	/**
	 * This method was generated by MyBatis Generator. This method corresponds to the database table wc_location_path_rule
	 * @mbggenerated
	 */
	protected void applyWhere(WcLocationPathRuleExample example,boolean includeExamplePhrase){if (example == null){return;}String parmPhrase1;String parmPhrase1_th;String parmPhrase2;String parmPhrase2_th;String parmPhrase3;String parmPhrase3_th;if (includeExamplePhrase){parmPhrase1="%s #{example.oredCriteria[%d].allCriteria[%d].value}";parmPhrase1_th="%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";parmPhrase2="%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";parmPhrase2_th="%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";parmPhrase3="#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";parmPhrase3_th="#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";} else {parmPhrase1="%s #{oredCriteria[%d].allCriteria[%d].value}";parmPhrase1_th="%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";parmPhrase2="%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";parmPhrase2_th="%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";parmPhrase3="#{oredCriteria[%d].allCriteria[%d].value[%d]}";parmPhrase3_th="#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";}StringBuilder sb=new StringBuilder();List<Criteria> oredCriteria=example.getOredCriteria();boolean firstCriteria=true;for (int i=0;i < oredCriteria.size();i++){Criteria criteria=oredCriteria.get(i);if (criteria.isValid()){if (firstCriteria){firstCriteria=false;} else {sb.append(" or ");}sb.append('(');List<Criterion> criterions=criteria.getAllCriteria();boolean firstCriterion=true;for (int j=0;j < criterions.size();j++){Criterion criterion=criterions.get(j);if (firstCriterion){firstCriterion=false;} else {sb.append(" and ");}if (criterion.isNoValue()){sb.append(criterion.getCondition());} else if (criterion.isSingleValue()){if (criterion.getTypeHandler() == null){sb.append(String.format(parmPhrase1,criterion.getCondition(),i,j));} else {sb.append(String.format(parmPhrase1_th,criterion.getCondition(),i,j,criterion.getTypeHandler()));}} else if (criterion.isBetweenValue()){if (criterion.getTypeHandler() == null){sb.append(String.format(parmPhrase2,criterion.getCondition(),i,j,i,j));} else {sb.append(String.format(parmPhrase2_th,criterion.getCondition(),i,j,criterion.getTypeHandler(),i,j,criterion.getTypeHandler()));}} else if (criterion.isListValue()){sb.append(criterion.getCondition());sb.append(" (");List<?> listItems=(List<?>)criterion.getValue();boolean comma=false;for (int k=0;k < listItems.size();k++){if (comma){sb.append(", ");} else {comma=true;}if (criterion.getTypeHandler() == null){sb.append(String.format(parmPhrase3,i,j,k));} else {sb.append(String.format(parmPhrase3_th,i,j,k,criterion.getTypeHandler()));}}sb.append(')');}}sb.append(')');}}if (sb.length() > 0){WHERE(sb.toString());}}
}